# 错误码定义
class ErrorCode:
    # =============================================================================
    # 系统错误 (1000-1099)
    # =============================================================================
    SYSTEM_ERROR = 1000  # 系统错误
    SYSTEM_BUSY = 1001   # 系统繁忙
    INTERNAL_ERROR = 1002  # 内部错误
    
    # =============================================================================
    # 参数错误 (1100-1199)
    # =============================================================================
    INVALID_PARAMS = 1100  # 无效参数
    MISSING_REQUIRED_PARAMS = 1101  # 缺少必要参数
    PARAMS_TYPE_ERROR = 1102  # 参数类型错误
    PARAMS_VALUE_ERROR = 1103  # 参数值错误
    INVAILD_PARAM_EXCEPTION = 1104  # 参数验证异常 (与Pydantic默认状态码422对应)
    
    # =============================================================================
    # 认证错误 (2000-2099)
    # =============================================================================
    AUTH_FAILED = 2000  # 认证失败
    TOKEN_INVALID = 2001  # 令牌无效
    TOKEN_EXPIRED = 2002  # 令牌过期
    NO_PERMISSION = 2003  # 无权限访问
    SESSION_EXPIRED = 2004  # 会话过期
    
    # =============================================================================
    # 资源错误 (3000-3099)
    # =============================================================================
    RESOURCE_NOT_FOUND = 3001  # 资源不存在
    RESOURCE_ALREADY_EXISTS = 3002  # 资源已存在
    RESOURCE_LOCKED = 3003  # 资源被锁定
    RESOURCE_LIMIT_EXCEEDED = 3004  # 资源限制超限
    
    # =============================================================================
    # 业务错误 (3100-3999)
    # =============================================================================
    BUSINESS_ERROR = 3100  # 业务错误
    OPERATION_FAILED = 3101  # 操作失败
    VALIDATION_FAILED = 3102  # 验证失败
    
    # =============================================================================
    # HTTP错误 (4000-4999)
    # =============================================================================
    HTTP_ERROR = 4000  # HTTP错误
    
    # =============================================================================
    # 数据库错误 (5000-5099)
    # =============================================================================
    DATABASE_ERROR = 5000  # 数据库错误
    DATABASE_CONNECTION_ERROR = 5001  # 数据库连接错误
    DATABASE_QUERY_ERROR = 5002  # 数据库查询错误
    DATABASE_TRANSACTION_ERROR = 5003  # 数据库事务错误

# 错误码到HTTP状态码的映射
error_code_to_http_status = {
    # 系统错误
    ErrorCode.SYSTEM_ERROR: 500,
    ErrorCode.SYSTEM_BUSY: 503,
    ErrorCode.INTERNAL_ERROR: 500,
    
    # 参数错误
    ErrorCode.INVALID_PARAMS: 400,
    ErrorCode.MISSING_REQUIRED_PARAMS: 400,
    ErrorCode.PARAMS_TYPE_ERROR: 400,
    ErrorCode.PARAMS_VALUE_ERROR: 400,
    ErrorCode.INVAILD_PARAM_EXCEPTION: 422,
    
    # 认证错误
    ErrorCode.AUTH_FAILED: 401,
    ErrorCode.TOKEN_INVALID: 401,
    ErrorCode.TOKEN_EXPIRED: 401,
    ErrorCode.NO_PERMISSION: 403,
    ErrorCode.SESSION_EXPIRED: 401,
    
    # 资源错误
    ErrorCode.RESOURCE_NOT_FOUND: 404,
    ErrorCode.RESOURCE_ALREADY_EXISTS: 409,
    ErrorCode.RESOURCE_LOCKED: 423,
    ErrorCode.RESOURCE_LIMIT_EXCEEDED: 429,
    
    # 业务错误
    ErrorCode.BUSINESS_ERROR: 400,
    ErrorCode.OPERATION_FAILED: 400,
    ErrorCode.VALIDATION_FAILED: 400,
    
    # 数据库错误
    ErrorCode.DATABASE_ERROR: 500,
    ErrorCode.DATABASE_CONNECTION_ERROR: 503,
    ErrorCode.DATABASE_QUERY_ERROR: 500,
    ErrorCode.DATABASE_TRANSACTION_ERROR: 500,
}